const ManagementTag = require('../model').ManagementTag

exports.fetchById = function(managementTagId) {
  return ManagementTag.findById(managementTagId)
}

exports.addUserById = function(tagId, userId) {
  return ManagementTag.findOneAndUpdate({
    _id: tagId
  }, {
    $push: {
      members: userId
    }
  }, { new: true })
}

exports.removeUserById = function(tagId, userId) {
  return ManagementTag.findOneAndUpdate({
    _id: tagId
  }, {
    $pull: {
      members: userId
    }
  }, { new: true })
}

exports.createWithName = function(name) {
  return ManagementTag.create({ name })
}

exports.updateById = function(tagId, update) {
  return ManagementTag.findOneAndUpdate({ _id: tagId }, update, { new: true })
}

exports.deleteById = function(tagId) {
  return ManagementTag.findByIdAndRemove(tagId)
}

exports.fetchAllMembersManagementTagsInTag = function(tagId) {
  return ManagementTag.findOne({
    _id: tagId
  }).populate({
    path: 'members',
    select: 'teams',
    populate: {
      path: 'teams.management_tags'
    }
  })
}
